/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller.Interface;

import Controller.Exceptions.ControllerReceivedException;
import Model.PathFile;
import java.net.InetAddress;

/**
 * L'interface ReceivedInterface définie les methodes qui gèrent le 
 * le traitement de signaux recu par le ChatControlleur 
 * 
 * <p>Certaines methodes définies dans l'interface UDPSenderInterface lèvent 
 * une exception de type  <tt>ControllerReceivedException</tt>
 *
 * @author      Frank Djomo
 * @author      Christelle SIAGO HAPPI
 * @author      djomopoueme@gmail.com
 * @author      christelle.siagohappi@gmail.com
 * @version     1.0
 * @see     ControllerReceivedException
 */
public interface ReceivedInterface {

    
    /**
    * Gère la reception d'un Hello distant 
    * @param remoteLogin Login de l'utilisateur distant
    * @param request     Type de requete Hello
    *                    <code>true</code> si Hello Request 
    *                    <code>false</code> si Hello Reply
    * @param address    Adresse IP de l'utilisateur distant
    * @throws ControllerReceivedException
    */
    public void receivedHello(String remoteLogin,boolean request,InetAddress address) throws ControllerReceivedException;
    /**
    * Gère la reception d'un Bye distant 
    * @param remoteLogin Login de l'utilisateur distant
    */
    public void receivedBye(String remoteLogin);
     /**
    * Gère la reception d'un message texte
    * @param message Message texte recu
    * @param remoteLogin Login de l'utilisateur distant
    */
    public void receivedChat(String message, String remoteLogin);	
    /**
    * Gère la reception d'une demande de transfert de fichier
    * @param pathFile       PathFile du fichier à transferer
    * @param remoteLogin    Login de l'utilisteur distant
    * @see PathFile
    */
     public void receivedFileRequest(PathFile pathFile, String remoteLogin);
    
     /**
    * Gère la reception d'une reponse de transfert de fichier
    * @param accept      <code>true</code> si demande accepté 
    *                    <code>false</code> sinon
    */
    public void receivedFileResponse(boolean accept) ;
     /**
    * Gère la reception d'un wizz à un utilisateur distant
    * @param remoteLogin Login de l'utilisateur distant à qui envoyer le wizz
    */
    public void receivedWizzer(String remoteLogin);
     /**
    * Gère la reception d'une notification de status
    * @param remoteLogin Login de l'utilisateur distant
    * @param status  Status de l'utilisateur distant
    * @throws ControllerReceivedException
    */
    public void receivedStatus(String remoteLogin, String status) throws ControllerReceivedException;   
    /**
    * Gère la reception d'une notification d'ecriture 
    * @param remoteLogin Login de l'utilisateur distant
    * @param isWriting   <code>true</code> si utilisateur ecrit 
    *                  <code>false</code> sinon 
    * @throws ControllerReceivedException
    */
    public void receivedComposing(String remoteLogin, boolean isWriting ) throws ControllerReceivedException;

}
